package com.springcloud.zuul.common.utlis;

import com.springcloud.zuul.entity.CommonEntity;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;

/**
 * @program: springcloud-zuul
 * @description: 新增与修改
 * @author: zhlu
 * @create: 2020-01-04 10:37
 * @Introduction(说明背景故事)
 **/
@Slf4j
public class ParamsCommon {

    private static String getActionMethod() {
        return Thread.currentThread().getStackTrace()[8].getMethodName();
    }

    /**
     * 获得当前方法名
     * @return
     */
    public static String getCurrentMethodName() {
        int level = 1;
        StackTraceElement[] stacks = new Throwable().getStackTrace();
        return stacks[level].getMethodName();
    }

    /**
     * 获得当前类名
     * @return
     */
    public static String getCurrentClassName() {
        int level = 1;
        StackTraceElement[] stacks = new Throwable().getStackTrace();
        return stacks[level].getClassName();
    }

    /**
     * Description:通用 新增
     * @author zhlu
     * @date 2020/1/4 10:40 上午
     * @param params
     * @return java.util.Map<java.lang.String,java.lang.Object>
     */
    public static CommonEntity commonInsertParms(Map<String, Object> params, Class cls) {
        CommonEntity commonEntity=new CommonEntity();
        if (params == null) {
            return commonEntity;
        }
        //创建时间 Insert时间
        commonEntity.setInstm(ConvertDateTime.getCurrentTime());
        //创建人 Insert操作者  默认给auto
        if (StringUtils.isEmpty(MapUtils.getString(params,"by"))) {
            commonEntity.setInsby(null);
        } else {
            //创建人 Insert操作者
            commonEntity.setInsby(ContextUtils.getUserId());
        }
        //更新人 Update操作者  默认给auto
        if (StringUtils.isEmpty(MapUtils.getString(params,"fnc"))) {
            commonEntity.setInsfnc(cls.getSimpleName()+"." + getCurrentMethodName());
        }
        return commonEntity;
    }

    /**
     * Description:通用 修改
     * @author zhlu
     * @date 2020/1/4 11:15 上午
     * @param params
     * @param cls
     * @return java.util.Map<java.lang.String,java.lang.Object>
     */
    public static Map<String, Object> commonUpdateParms(Map<String, Object> params, Class cls) {
        if (params == null) {
            return params;
        }
        //更新时间 Update时间
        params.put("updtm", ConvertDateTime.getCurrentTime());

        if (params.get("by") == null) {
            //更新人 Update操作者  默认给auto
            params.put("updby", ContextUtils.getUserId());
        } else {
            //更新人 Update操作者
            params.put("updby", params.get("by"));
            params.remove("by");
        }
        //更新人 Update操作者  默认给auto
        params.put("updfnc", getActionMethod() + cls.getSimpleName());
        params.remove("fnc");
        return params;
    }
}
